package com.awspaas.user.apps.cpq.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.util.DBSql;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class CPQ_GetProjectHtmlPage {

	public String getProjectHtmlPage(UserContext userContext, String uid) {
		try {
			//获取当前用户能够发起的项目类型
			String  sql="select  * from BO_EU_CPQ_PROTECT_TYPE";
			String  sqldz="select XMLX,CPXH,DZSM,BINDID from BO_EU_CPQ_TEMPLATE_PRICE where STATUS='启用'";
			List<RowMap> maps=DBSql.getMaps(sql);
			List<RowMap> dzMaps=DBSql.getMaps(sqldz);
			//存放产品类型和项目类型
			Map<String , Set<String>> lxMap=new HashMap<String, Set<String>>();
			//存放设备型号和产品类型
			Map<String , Set<String>> cpMap=new HashMap<String, Set<String>>();
			for (RowMap rowMap : maps) {
				String xmlx=rowMap.getString("XMLX");//项目类型
				String cplx=rowMap.getString("XH");//产品类型
				String sbxh=rowMap.getString("CPXH");//设备型号
				//判断是否已存放该项目类型，如果存放将项目类型关联的产品类型存放在list集合在，并将该数据放入项目类型的map集合中。
				if(lxMap.containsKey(xmlx)) {
					Set<String> cplxs=lxMap.get(xmlx);
					cplxs.add(cplx);
					lxMap.put(xmlx, cplxs);
				}else {
					   Set<String> set = new HashSet<>();
					   set.add(cplx);
					   lxMap.put(xmlx, set);
				}
				//判断是否已存放该产品类型，如果存放将产品类型关联的设备型号存放在list集合在，并将该数据放入产品类型的map集合中。
				if(cpMap.containsKey(cplx)) {
					Set<String> sblxs=cpMap.get(cplx);
					sblxs.add(sbxh);
					cpMap.put(cplx, sblxs);
				}else {
					   Set<String> set = new HashSet<>();
					   set.add(sbxh);
					   cpMap.put(cplx, set);
				}
				
			}
		
			//存放定制说明和设备型号
			Map<String , Set<String>> dzMap=new HashMap<String, Set<String>>();
			for (RowMap rowMap : dzMaps) {
				String sbxh=rowMap.getString("CPXH");//设备型号
				String dzsm=rowMap.getString("DZSM");//定制说明
				if(dzMap.containsKey(sbxh)) {
					Set<String> dzsms=dzMap.get(sbxh);
					dzsms.add(dzsm);
					dzMap.put(sbxh, dzsms);
				}else {
					Set<String> set = new HashSet<>();
					   set.add(dzsm);
					   dzMap.put(sbxh, set);
				}
			}
			JSONArray jsonArray=new JSONArray();//存放项目类型的所有数据
			//进行数据组装。
			for (String key : lxMap.keySet()) {
				JSONObject xmJson=new JSONObject();
				xmJson.put("name", key);
				xmJson.put("Child‌", "true");				
				Set<String> cps=lxMap.get(key);
				//获取项目类型下的产品类型信息
				JSONArray xmja=new JSONArray();
				for (String string : cps) {
					JSONObject cpJson=new JSONObject();
					cpJson.put("name", string);
					cpJson.put("Child‌", "true");					
					//获取产品类型下的设备型号
					Set<String> sbs=cpMap.get(string);
					JSONArray sbja=new JSONArray();
					for (String sb : sbs) {
						JSONObject sbJson=new JSONObject();
						sbJson.put("name", sb);
						//判断设备型号中是否有下级定制说明
						if(dzMap.containsKey(sb)) {
						   sbJson.put("Child‌", "true");
						   Set<String> dzsms=dzMap.get(sb);
						   JSONArray dzja=new JSONArray();
						   for (String dz : dzsms) {
							   JSONObject dzJson=new JSONObject();
							   dzJson.put("name", dz);
							   dzJson.put("Child‌", "false");
							   dzja.add(dzJson);
						}
						   //如果存在则放入子集
						   sbJson.put("datas", dzja); 
						}else {
							sbJson.put("Child‌", "false");							
						}
						//存放产品类型中的设备子集
						sbja.add(sbJson);						
					}
					cpJson.put("datas", sbja);
					xmja.add(cpJson);
				}
				xmJson.put("datas", xmja);
				jsonArray.add(xmJson);
			}
			System.out.println("数据："+jsonArray.toString());
			
			return jsonArray.toString();
		} catch (Exception e) {
			throw e;
		}
		
	}

}
